UITableView 一些点点滴滴

From: http://www.jianshu.com/p/bb21b4d45a8d

UITableViewCell的选中时的颜色设置

1.系统默认的颜色设置

//无色
cell.selectionStyle = UITableViewCellSelectionStyleNone;

//蓝色
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

//灰色
cell.selectionStyle = UITableViewCellSelectionStyleGray;

2.自定义颜色和背景设置

改变UITableViewCell选中时背景色:

UIColor *color = [[UIColoralloc]initWithRed:0.0 green:0.0 blue:0.0 alpha:1];//通过RGB来定义自己的颜色

cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];//这句不可省略
cell.selectedBackgroundView.backgroundColor = [UIColor xxColor];

3.自定义UITableViewCell选中时背景

cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellart.png"]] ; 
 //还有字体颜色 
cell.textLabel.highlightedTextColor = [UIColor xxxcolor];  [cell.textLabel setTextColor:color];//设置cell的字体的颜色

4.设置tableViewCell间的分割线的颜色

[theTableView setSeparatorColor:[UIColor xxColor]];

5、设置cell中字体的颜色

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  if(indexPath.row == 0)
  {
    cell.textLabel.textColor = ...;
    cell.textLabel.highlightedTextColor = ...;
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// tableviewcell 选中图标
override func layoutSubviews() {
self.selectedBackgroundView?.frame = self.bounds
super.layoutSubviews()
if #available(iOS 8 , *){
// ios7 没效果 第一次也不出现,还是得子定义
for control in self.subviews{
if control.isMember(of: NSClassFromString("UITableViewCellEditControl")!){
for v in control.subviews{
if v.isKind(of: UIImageView.classForCoder()){
//var img = v as! UIImageView
// v = UIImageView(image: UIImage(named: "activity_close"))
if self.isSelected{
(v as! UIImageView).image = UIImage(named: "bjzl_gx")//2x 为40 v2_4_btn_set_selected
}else{
//(v as! UIImageView).image = UIImage(named: "activity_new")//必须原先的图 因为效果不能一直有
}
}
}
}
}
}else{
for view in self.subviews{
if view.isMember(of: NSClassFromString("UITableViewCellScrollView")!){
printLog("views \(view.subviews)")
let views2 = view.subviews
for control in views2{
if control.isMember(of: NSClassFromString("UITableViewCellEditControl")!){
for v in control.subviews{
if v.isKind(of: UIImageView.classForCoder()){
let img = v as! UIImageView
if self.isSelected{
img.image = UIImage(named: "bjzl_gx")
}else{
//img.image = UIImage(named: "activity_new")//必须原先的图 因为效果不能一直有
}
}
}
}
}
}
}
}
}

—– 遇到一个坑爹的问题– 顶部留白20像素 —-

1 不是 automaticallyAdjustsScrollViewInsets 问题 已经设置false
2 不是ios 11 的问题 已经设置不自动计算
tab

1
2
3
self.estimatedRowHeight = 0
self.estimatedSectionFooterHeight = 0;
self.estimatedSectionHeaderHeight = 0;

3 最后, 原因 UITableViewWrapperView 和 UItableView frame 不一致造成的,
据说是 navigationBar.alpha 不为1 会出现,自动下移, 在布局后 重置下内容位置

1
2
3
4
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews();
self.tableView.contentInset = UIEdgeInsets.zero;
}

滑动到顶部 或者底部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (void)scrollToBottom
{
CGFloat yOffset = 0; //设置要滚动的位置 0最顶部 CGFLOAT_MAX最底部
if (self.tableView.contentSize.height > self.tableView.bounds.size.height) {
yOffset = self.tableView.contentSize.height - self.tableView.bounds.size.height;
}
[self.tableView setContentOffset:CGPointMake(0, yOffset) animated:NO];
}
// 可能会有bug ,用下面的方式
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.messageModelArray.count-1 inSection:0];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

Author

陈昭

Posted on

2017-08-05

Updated on

2021-12-27

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Kommentare

You forgot to set the shortname for Disqus. Please set it in _config.yml.